package pe.gob.proviasnac.app.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpSession;
import pe.gob.proviasnac.app.dto.ConsultaLoginEmpresa;
import pe.gob.proviasnac.app.dto.ConsultaLoginEmpresaCriteria;
import pe.gob.proviasnac.app.dto.ConsultaLoginInterno;
import pe.gob.proviasnac.app.dto.ConsultaLoginInternoCriteria;
import pe.gob.proviasnac.app.dto.ConsultaPermisosRol;
import pe.gob.proviasnac.app.dto.ConsultaPermisosRolCriteria;
import pe.gob.proviasnac.app.dto.ConsultaRolesUsuario;
import pe.gob.proviasnac.app.dto.ConsultaRolesUsuarioCriteria;
import pe.gob.proviasnac.app.model.ModelHelper;
import pe.gob.proviasnac.app.mybatis.SessionFactory;
import pe.gob.proviasnac.app.utiles.Constantes;
import pe.gob.proviasnac.app.utiles.SessionUtil;

public class LoginAction extends ModelHelper implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
	
	private String txtNomUsuario;
	private String txtPwdUsuario;
	private String txtCodCng;
	
	public String loginExterno(){
				
		if(txtCodCng != null && txtPwdUsuario != null && txtNomUsuario != null){
			
			this.session = SessionFactory.getSqlSessionFactory().openSession();
			
			HttpSession sesionUsuario = SessionUtil.getSesion();
			
			ConsultaLoginEmpresa login = this.consultaLoginEmpresa(txtCodCng);
			
			if(login != null){
				
				if(login.getClaveUsuario().equals(txtPwdUsuario) && login.getNombreUsuario().equals(txtNomUsuario)){
					ConsultaRolesUsuario rolesUsuario = this.consultaRolesUsuario(login.getIdUsuario());
					if(rolesUsuario != null){
						List<ConsultaPermisosRol> permisos = this.consultaPermisosRol(rolesUsuario.getIdRol());
						if(!permisos.isEmpty()){
							sesionUsuario.setAttribute(Constantes.SESION_CONSULTA_ROLES_USUARIO, rolesUsuario);
							sesionUsuario.setAttribute(Constantes.SESION_CONSULTA_PERMISOS_ROL, permisos);
							for(ConsultaPermisosRol x : permisos){
								System.out.println(x.toString());
								return "home";
							}
						}
					}
				}

			}
			
			session.commit();
			session.close();
		}else{
			return SUCCESS;
		}
		return ERROR;
	}
	
	public ConsultaRolesUsuario consultaRolesUsuario(Integer idUsuario){
		
		ConsultaRolesUsuarioCriteria criteriaRoles = new ConsultaRolesUsuarioCriteria();
		criteriaRoles.setIdUsuario(idUsuario);
		List<ConsultaRolesUsuario> list = (ArrayList<ConsultaRolesUsuario>) this.selectByCriteria("ConsultaRolesUsuario", criteriaRoles);
		if(!list.isEmpty()){
			return list.get(0);
		}
		return null;
	}
	public List<ConsultaPermisosRol> consultaPermisosRol(Integer idRol){
		ConsultaPermisosRolCriteria permisosRoles = new ConsultaPermisosRolCriteria();
		permisosRoles.setIdRol(idRol);
		List<ConsultaPermisosRol> permisos = this.selectByCriteria("ConsultaPermisosRol", permisosRoles);
		return permisos;
	}
	
	public ConsultaLoginEmpresa consultaLoginEmpresa(String codigoMTC){
		ConsultaLoginEmpresaCriteria criteria = new ConsultaLoginEmpresaCriteria();
		criteria.setRegistroMTC(codigoMTC);
		List<ConsultaLoginEmpresa> list = (ArrayList<ConsultaLoginEmpresa>) this.selectByCriteria("ConsultaLoginEmpresa", criteria);
		if(!list.isEmpty()){
			return list.get(0);
		}
		return null;
	}
	public ConsultaLoginInterno  consultaLoginInterno(String nomUsaruio){
		ConsultaLoginInternoCriteria criteria = new ConsultaLoginInternoCriteria();
		criteria.setNombreUsuario(nomUsaruio);
		List<ConsultaLoginInterno> list = (ArrayList<ConsultaLoginInterno>) this.selectByCriteria("ConsultaLoginInterno", criteria);
		if(!list.isEmpty()){
			return list.get(0);
		}
		return null;
	}
	
	public String loginInterno(){
		if(txtNomUsuario != null && txtPwdUsuario != null){
			
			session = SessionFactory.getSqlSessionFactory().openSession();
			
			HttpSession sesionUsuario = SessionUtil.getSesion();
			
			ConsultaLoginInterno login = this.consultaLoginInterno(txtNomUsuario);
			
			if(login != null){
				
				if(login.getClaveUsuario().equals(txtPwdUsuario) && login.getNombreUsuario().equals(txtNomUsuario)){
					
					sesionUsuario.setAttribute("ConsultaLoginEmpresa", login);
					
					ConsultaRolesUsuario rolesUsuario = this.consultaRolesUsuario(login.getIdUsuario());

					if(rolesUsuario != null){
						
						sesionUsuario.setAttribute("ConsultaRolesUsuario", rolesUsuario);

						List<ConsultaPermisosRol> permisos = this.consultaPermisosRol(rolesUsuario.getIdRol());
						if(!permisos.isEmpty()){
							sesionUsuario.setAttribute("ConsultaPermisosRol", permisos);
							for(ConsultaPermisosRol x : permisos){
								System.out.println(x.toString());
								return "home";
							}
						}
					}
				}

			}
			session.commit();
			session.close();
		}else{
			return SUCCESS;
		}
		return ERROR;
	}

	public String getTxtNomUsuario() {
		return txtNomUsuario;
	}

	public void setTxtNomUsuario(String txtNomUsuario) {
		this.txtNomUsuario = txtNomUsuario;
	}

	public String getTxtPwdUsuario() {
		return txtPwdUsuario;
	}

	public void setTxtPwdUsuario(String txtPwdUsuario) {
		this.txtPwdUsuario = txtPwdUsuario;
	}

	public String getTxtCodCng() {
		return txtCodCng;
	}

	public void setTxtCodCng(String txtCodCng) {
		this.txtCodCng = txtCodCng;
	}
	

}
